package main

import (
	"fmt"
	"log"
	"os"
	"sync"
	"time"

	"github.com/eclipse/paho.mqtt.golang"
	"gopkg.in/goyy/goyy.v0/util/uuids"
)

func main() {
	swg := sync.WaitGroup{}
	swg.Add(1)
	//日志输出
	//mqtt.DEBUG = log.New(os.Stdout, "debug：", 0)
	mqtt.ERROR = log.New(os.Stdout, "error：", 0)
	//生成客户端ID,每一个客户端都有一个固定的ID,这里是每次启动都是随机生成
	clId := uuids.New()[0:23]
	clId = "serverPushClient"
	//创建一个客户端连接配置
	opts := mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID(clId)
	//配置消息存放目录
	fs := mqtt.NewFileStore("e://mqtt//")
	opts.SetStore(fs)
	//心跳
	opts.SetKeepAlive(2 * time.Second)
	//超时设置
	opts.SetPingTimeout(1 * time.Second)
	//用户名和密码
	opts.SetUsername("admin")
	opts.SetPassword("admin")
	//断开连接时是否清除当前会话,如果清除重新连接后将收不到历史消息,需要保持当前客户端ID不变
	opts.SetCleanSession(false)
	//创建一个客户端
	c := mqtt.NewClient(opts)
	//连接到服务端
	if token := c.Connect(); token.Wait() && token.Error() != nil {
		panic(token.Error())
	}
	i := 1
	for {
		text := fmt.Sprint("这是第", i, "个消息内容。")
		text = fmt.Sprint(text, text)
		//推送一个消息
		//参数 主题,qos,是否持久化,内容
		token := c.Publish("go-mqtt-sample", 1, true, text)
		if !token.Wait() {
			log.Println("err")
		}
		log.Println("PUSH ", text)
		time.Sleep(time.Second)
		i++
	}
	swg.Wait()
	//断开连接,参数毫秒数用于等待未完成的任务
	c.Disconnect(250)
}
